Prewave Collections - Network API

Allows you to retrieve network information. Like tree-graph and commodity-graph.

OpenAPI Specification

prewave-collections-network-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Public Prewave Actions Collections - Network API
  description: 'Documentation of the Public Prewave API.


    ## What''s New


    ### Q1 2026 — Supplier Management, User Management, Actions and Feed


    This quarter introduces major v2 upgrades, expanded administrative capabilities, and the new Actions API.


    - **Core Releases:** Deployed Supplier Management API v2 and Feed API v2, alongside the all-new Actions API.

    - **Enhanced Functionality:** Added robust identifier management, granular user and role configuration, and endpoints for managing supplier connection contacts.

    - ⚠️ **Required Migration:** Legacy v1 endpoints for Suppliers and Sites Upsert have been deprecated. Developers must migrate existing integrations to v2 by **May 31, 2027** (original deadline was December 31, 2026).


    📖 **[Read the Q1 2026 changelog](https://docs.prewave.com/en/articles/699847-q1-2026-public-api-updates)**


    ### Q2 2026 — Supplier Screening and External Scores


    We have expanded our v2 documentation to include comprehensive integration guidance for supplier screening and validation workflows and identifier-based external score ingestion.


    - **New Capabilities:** Added support for optional post-onboarding screening and validation during the create event.

    - **External Scores:** Batch POST for multiple supplier sites, per-site history GET, and event-type discovery GET (`/public/v1/scores/externals` and `/public/v1/scores/externals/event-types`). Documented in OpenAPI when enabled for your organization.

    - **Developer Resources:** Published new integration examples and detailed identifier validation rules to streamline your implementation process.


    📖 **[Read the Q2 2026 changelog](https://docs.prewave.com/en/articles/699849-q2-2026-public-api-updates)**


    ### Q3 2026 — Scores Webhooks


    To support event-driven architectures and eliminate the need for continuous API polling, we are introducing webhooks for score state changes later this year.


    - **Event-Driven Architecture:** Register webhook URLs to receive real-time HTTP payloads whenever a supplier''s score updates, so you can drive immediate mitigation responses without polling the API.

    - **Availability:** Comprehensive OpenAPI specifications and payload schemas will be published closer to the release date.

    - **Note:** Schemas and behaviors are subject to refinement prior to general availability.


    Documentation updates will be provided prior to release.


    ### Q4 2026 — Feed V2


    We are enhancing Feed API v2 with additional capabilities on top of the existing `GET /public/v2/feed` contract (see Q1 changelog and OpenAPI for the current Feed v2 integration).


    - **Availability:** Details will be announced before release.

    - **Note:** Schemas and behaviors are subject to refinement prior to the official release.


    Documentation updates will be provided prior to release.


    ---


    ## Authentication

    Prewave’s public api uses *API tokens* to authenticate against our RESTful service. We’ll provide you an *API-token* that each

    endpoint needs present as a http header.


    To pass the token in a request, simply add it as a header-parameter with

    * key = X-Auth-Token

    * value = api-token


    See an example in curl below where the api-token would be 12345678-90ab-cdef-1234-567890abcdef

    ```

    curl --request GET \

    --url https://REPLACE_WITH_SERVER/public/v1/target/prewave/3975230/alerts \

    --header ''X-Auth-Token: 12345678-90ab-cdef-1234-567890abcdef''

    ```


    ---


    ## Manage API Tokens


    Before you can obtain your API token, you''ll need the credentials for your API user. These credentials will be

    sent to you as part of the company-onboarding. If you haven''t got your credentials yet, please reach out to

    your sales-contact at Prewave or contact us via info@prewave.ai


    To generate an API Token, navigate to https://www.prewave.com/management/api and log in with the

    credentials of your API user. Then click at the button "Create New" and use your new api-token authentication as a header parameter.


    You can create multiple API tokens and also remove existing API tokens on https://www.prewave.com/management/api.

    API tokens do not expire, therefore you have to maintain the list of API tokens you are using manually.


    ---


    ## Default Rate Limits


    We have two types of default rate limits. For increased access, please contact customer success.


    | Type                              | Requests per 10 seconds | Requests per Minute |

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

    | GET requests                      | 100                     | 500                 |

    | POST, PUT, PATCH, DELETE requests | 20                      | 100                 |


    '
  version: '1.0'
servers:
- url: https://api.prewave.com
  description: Production Environment
security:
- Token authentication: []
tags:
- name: Collections - Network
  description: Allows you to retrieve network information. Like tree-graph and commodity-graph.
paths:
  /public/v2/network/{collectionId}/tree-graph:
    get:
      tags:
      - Collections - Network
      summary: Get tree graph for a collection
      description: "\n⚠️ **DEPRECATED** - This endpoint is deprecated and will be removed at the end of December 2026.\n\n**Note**: Responses include a `Sunset` HTTP header (RFC 8594) indicating the removal date.\n\n---\n\n## Migration Required\n\nThis endpoint has been replaced by the v1 Collections Tier-N API. Please migrate to the new endpoint:\n\n### Replacement Endpoint\n\n| Old Endpoint | New Endpoint | Purpose |\n|--------------|--------------|---------|\n| `GET /public/v2/network/{collectionId}/tree-graph` | `GET /public/v1/collections/{collectionId}/tier-n/data` | Get collection-based supplier graphs |\n\n---\n\n## Why Migrate?\n\nThe v1 Collections Tier-N API provides significant improvements:\n\n### 1. Enhanced Functionality\n- **v2**: Basic tree graph with limited configuration\n- **v1 Tier-N**: Advanced filtering through collection settings\n- **v1 Tier-N**: Configurable data sources (customs, media, predictions)\n- **v1 Tier-N**: Better control over scope (private, shared, public targets)\n\n### 2. Better Performance\n- **v1 Tier-N**: Optimized queries for large collections\n- **v1 Tier-N**: More efficient data retrieval\n\n### 3. Improved Documentation\n- Comprehensive examples for all endpoints\n- Detailed error response documentation\n- Clear parameter descriptions\n\n---\n\n## Quick Migration Guide\n\n### Step 1: Update Endpoint URL\n\n**Before:**\n```http\nGET /public/v2/network/123/tree-graph?tierLevel=3\n```\n\n**After:**\n```http\nGET /public/v1/collections/123/tier-n/data?tierLevel=3\n```\n\n### Step 2: Update Response Parsing\n\n**Before:** Parse `PublicTreeTargetV2` structure\n\n**After:** Parse `PublicTierNCollectionGraphEntry` structure (different format)\n\n---\n\n**Required Permissions**: `ACCESS_PUBLIC_TREE_GRAPH` and `READ` on the collection\n\n**Performance Impact**: High\n\nFor detailed API reference and examples, see the v1 Collections Tier-N API documentation.\n        "
      operationId: treeGraph
      parameters:
      - name: collectionId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: commodityIds
        in: query
        required: false
        schema:
          type: array
          items:
            type: integer
            format: int32
      - name: commodityTreeId
        in: query
        required: false
        schema:
          type: integer
          format: int32
      - name: fetchParents
        in: query
        required: false
        schema:
          type: boolean
          default: true
      - name: tierLevel
        in: query
        required: false
        schema:
          maximum: 4
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PublicTreeTargetV2'
        '403':
          description: '403 Forbidden - Authentication or authorization failure. This status code is returned when: (1) the request lacks valid authentication credentials (missing or invalid X-Auth-Token header), or (2) the authenticated user does not have the required permission to access this resource.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessDeniedErrorDTO'
              examples:
                Access denied example:
                  summary: User lacks necessary permissions or authentication
                  value: "{\n        \"loggedIn\": true,\n        \"code\": \"access_denied\",\n        \"message\": \"Access denied: you don't have necessary permissions to access this resource\",\n        \"solution\": \"Contact support for appropriate permissions\"\n    }"
        '500':
          description: 500 Internal Server Error - An unexpected error occurred on the server. The request may or may not have been processed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Error - Server Error:
                  summary: Unexpected server error
                  value: "{\n        \"code\": \"internal_error\",\n        \"message\": \"An unexpected error occurred\",\n        \"solution\": \"Please try again later or contact support\"\n    }"
        '429':
          description: '429 Too Many Requests - API rate limit exceeded. The request has been rejected because the rate limit for this endpoint has been exceeded. Default rate limits: GET requests - 100 per 10 seconds, 500 per minute; POST/PUT/PATCH/DELETE requests - 20 per 10 seconds, 100 per minute. For increased access, please contact customer success.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiRateLimitResponse'
              examples:
                Rate limit exceeded example:
                  summary: API rate limit exceeded
                  value: "{\n        \"error\": \"API rate limit exceeded\",\n        \"message\": \"You have reached the maximum allowed requests. Please try again later or upgrade your plan for increased access\",\n        \"requestLimit\": 100,\n        \"requestCount\": 100,\n        \"limits\": [\n            {\n                \"requestLimit\": 100,\n                \"timeInSeconds\": 10\n            },\n            {\n                \"requestLimit\": 500,\n                \"timeInSeconds\": 60\n            }\n        ],\n        \"currentTime\": \"2026-01-15T10:30:00\",\n        \"nextResetAt\": \"2026-01-15T10:30:10\"\n    }"
      deprecated: true
  /public/v2/network/{collectionId}/targets:
    get:
      tags:
      - Collections - Network
      summary: Get targets for a collection
      description: "\n⚠️ **DEPRECATED** - This endpoint is deprecated and will be removed at the end of December 2026.\n\n**Note**: Responses include a `Sunset` HTTP header (RFC 8594) indicating the removal date.\n\n---\n\n## Migration Required\n\nThis endpoint has been replaced by the v1 Collections API. Please migrate to the new endpoint:\n\n### Replacement Endpoint\n\n| Old Endpoint | New Endpoint | Purpose |\n|--------------|--------------|---------|\n| `GET /public/v2/network/{collectionId}/targets` | `GET /public/v1/collections/{collectionId}/targets` | Get targets in a collection |\n\n---\n\n## Why Migrate?\n\nThe v1 Collections API provides better consistency and alignment with the rest of the Collections API:\n\n### 1. Consistent API Structure\n- **v2**: Uses `/public/v2/network/{collectionId}/targets` which mixes network and collection concepts\n- **v1**: Uses `/public/v1/collections/{collectionId}/targets` which is more intuitive and consistent with other collection endpoints\n\n### 2. Better API Organization\n- The v1 endpoint is part of the dedicated Collections API (`PublicTargetCollectionController`)\n- Better aligns with RESTful principles where collection-related operations are grouped together\n- More discoverable alongside other collection management endpoints\n\n### 3. Enhanced Functionality\n- The v1 Collections API provides additional endpoints for managing targets in collections:\n- `POST /public/v1/collections/{collectionId}/targets` - Add targets to a collection\n- `DELETE /public/v1/collections/{collectionId}/targets/{targetId}` - Remove a target from a collection\n- `GET /public/v1/collections/{collectionId}/targets` - List targets in a collection (replacement)\n\n### 4. Improved Documentation\n- Comprehensive examples for all endpoints\n- Detailed error response documentation\n- Clear parameter descriptions\n- Better Swagger/OpenAPI documentation\n\n---\n\n## Quick Migration Guide\n\n### Step 1: Update Endpoint URL\n**Before:**\n```http\nGET /public/v2/network/{collectionId}/targets?page=0&size=20\n```\n\n**After:**\n```http\nGET /public/v1/collections/{collectionId}/targets?page=0&size=20\n```\n\n### Step 2: Verify Response Structure\nThe response structure is **identical** - no changes needed to your response parsing logic:\n\n**Response Format (unchanged):**\n```json\n{\n\"content\": [\n{\n\"id\": 10422185,\n\"name\": \"Inter Cars SA\"\n},\n{\n\"id\": 101641243,\n\"name\": \"Asmet Sp. z o.o.\"\n}\n],\n\"size\": 10,\n\"number\": 0,\n\"totalElements\": 57,\n\"totalPages\": 6,\n\"numberOfElements\": 2\n}\n```\n\n### Step 3: Update Error Handling\nError responses remain the same:\n- `401` - Authentication required\n- `403` - Insufficient permissions to read this collection\n- `404` - Collection not found or not accessible to the user\n\n---\n\n## Breaking Changes\n\n**None** - This is a straightforward URL change with identical functionality:\n\n1. **URL Path Only**: Only the URL path changes from `/public/v2/network/{collectionId}/targets` to `/public/v1/collections/{collectionId}/targets`\n2. **Response Structure**: Identical - returns `Page<PublicTargetRef>` with `id` and `name` fields\n3. **Query Parameters**: Identical - supports standard Spring pagination parameters (`page`, `size`, `sort`)\n4. **Permissions**: Identical - requires `ACCESS_PUBLIC_TARGET` authority and `READ` permission on the collection\n5. **Performance**: Identical - uses the same underlying service method\n\n---\n\n## Migration Example\n\n### Before (v2)\n```http\nGET /public/v2/network/123/targets?page=0&size=20\n```\n\n### After (v1)\n```http\nGET /public/v1/collections/123/targets?page=0&size=20\n```\n\nThe response will be identical in both cases.\n\n---\n\n**Required Permissions**: `ACCESS_PUBLIC_TARGET` and `READ` on the collection\n\n**Performance Impact**: Low\n\nFor detailed API reference, see the v1 Collections API documentation.\n        "
      operationId: targets
      parameters:
      - name: collectionId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: pageable
        in: query
        required: true
        schema:
          $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: object
                properties:
                  content:
                    type: array
                    items:
                      $ref: '#/components/schemas/PublicTargetRef'
                  size:
                    type: integer
                    format: int32
                  number:
                    type: integer
                    format: int32
                  totalElements:
                    type: integer
                    format: int32
                  totalPages:
                    type: integer
                    format: int32
                  numberOfElements:
                    type: integer
                    format: int32
                  first:
                    type: boolean
                  last:
                    type: boolean
                  empty:
                    type: boolean
        '403':
          description: '403 Forbidden - Authentication or authorization failure. This status code is returned when: (1) the request lacks valid authentication credentials (missing or invalid X-Auth-Token header), or (2) the authenticated user does not have the required permission to access this resource.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessDeniedErrorDTO'
              examples:
                Access denied example:
                  summary: User lacks necessary permissions or authentication
                  value: "{\n        \"loggedIn\": true,\n        \"code\": \"access_denied\",\n        \"message\": \"Access denied: you don't have necessary permissions to access this resource\",\n        \"solution\": \"Contact support for appropriate permissions\"\n    }"
        '500':
          description: 500 Internal Server Error - An unexpected error occurred on the server. The request may or may not have been processed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Error - Server Error:
                  summary: Unexpected server error
                  value: "{\n        \"code\": \"internal_error\",\n        \"message\": \"An unexpected error occurred\",\n        \"solution\": \"Please try again later or contact support\"\n    }"
        '429':
          description: '429 Too Many Requests - API rate limit exceeded. The request has been rejected because the rate limit for this endpoint has been exceeded. Default rate limits: GET requests - 100 per 10 seconds, 500 per minute; POST/PUT/PATCH/DELETE requests - 20 per 10 seconds, 100 per minute. For increased access, please contact customer success.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiRateLimitResponse'
              examples:
                Rate limit exceeded example:
                  summary: API rate limit exceeded
                  value: "{\n        \"error\": \"API rate limit exceeded\",\n        \"message\": \"You have reached the maximum allowed requests. Please try again later or upgrade your plan for increased access\",\n        \"requestLimit\": 100,\n        \"requestCount\": 100,\n        \"limits\": [\n            {\n                \"requestLimit\": 100,\n                \"timeInSeconds\": 10\n            },\n            {\n                \"requestLimit\": 500,\n                \"timeInSeconds\": 60\n            }\n        ],\n        \"currentTime\": \"2026-01-15T10:30:00\",\n        \"nextResetAt\": \"2026-01-15T10:30:10\"\n    }"
      deprecated: true
  /public/v2/network/{collectionId}/commodity-graph:
    get:
      tags:
      - Collections - Network
      summary: Get commodity graph for a collection
      description: "\nRetrieve a commodity-based network graph for a collection.\n\nThis endpoint returns a graph structure showing how targets in the collection are connected\nthrough commodity relationships. The graph represents supply chain relationships organized\nby commodity/product categories.\n\n**Use Cases**:\n- Analyze commodity-based supply chain networks\n- Visualize relationships organized by product categories\n- Identify commodity-specific supplier connections\n\n**Response Format**:\nReturns an array of tree nodes, where each node contains:\n- Target information\n- Commodity relationships\n- Nested supplier structures organized by commodities\n\n**Required Permissions**: `ACCESS_PUBLIC_COMMODITY_GRAPH` and `READ` on the collection\n\n**Performance Impact**: High\n        "
      operationId: commodityGraph
      parameters:
      - name: collectionId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Successfully retrieved commodity graph
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PublicTreeTargetV2'
        '404':
          description: 404 Not Found - Collection not found or not accessible
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
        '403':
          description: '403 Forbidden - Authentication or authorization failure. This status code is returned when: (1) the request lacks valid authentication credentials (missing or invalid X-Auth-Token header), or (2) the authenticated user does not have the required permission to access this resource.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessDeniedErrorDTO'
              examples:
                Access denied example:
                  summary: User lacks necessary permissions or authentication
                  value: "{\n        \"loggedIn\": true,\n        \"code\": \"access_denied\",\n        \"message\": \"Access denied: you don't have necessary permissions to access this resource\",\n        \"solution\": \"Contact support for appropriate permissions\"\n    }"
        '500':
          description: 500 Internal Server Error - An unexpected error occurred on the server. The request may or may not have been processed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Error - Server Error:
                  summary: Unexpected server error
                  value: "{\n        \"code\": \"internal_error\",\n        \"message\": \"An unexpected error occurred\",\n        \"solution\": \"Please try again later or contact support\"\n    }"
        '429':
          description: '429 Too Many Requests - API rate limit exceeded. The request has been rejected because the rate limit for this endpoint has been exceeded. Default rate limits: GET requests - 100 per 10 seconds, 500 per minute; POST/PUT/PATCH/DELETE requests - 20 per 10 seconds, 100 per minute. For increased access, please contact customer success.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiRateLimitResponse'
              examples:
                Rate limit exceeded example:
                  summary: API rate limit exceeded
                  value: "{\n        \"error\": \"API rate limit exceeded\",\n        \"message\": \"You have reached the maximum allowed requests. Please try again later or upgrade your plan for increased access\",\n        \"requestLimit\": 100,\n        \"requestCount\": 100,\n        \"limits\": [\n            {\n                \"requestLimit\": 100,\n                \"timeInSeconds\": 10\n            },\n            {\n                \"requestLimit\": 500,\n                \"timeInSeconds\": 60\n            }\n        ],\n        \"currentTime\": \"2026-01-15T10:30:00\",\n        \"nextResetAt\": \"2026-01-15T10:30:10\"\n    }"
  /public/v2/network/tree/{commodityTreeId}/commodity-graph:
    get:
      tags:
      - Collections - Network
      summary: Get commodity graph for a commodity tree
      description: "\nRetrieve a commodity-based network graph using a commodity tree ID.\n\nThis endpoint is similar to the collection-based commodity graph endpoint but uses a commodity\ntree ID to identify the collection. The commodity tree represents a hierarchical organization\nof commodity categories.\n\n**Use Cases**:\n- Analyze commodity-based networks using commodity tree identifiers\n- Visualize relationships for specific commodity hierarchies\n- Integrate with systems that use commodity tree IDs\n\n**Response Format**:\nReturns an array of tree nodes organized by commodity relationships.\n\n**Required Permission**: `ACCESS_PUBLIC_COMMODITY_GRAPH`\n\n**Performance Impact**: High\n        "
      operationId: treeCommodityGraph
      parameters:
      - name: commodityTreeId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: Successfully retrieved commodity graph
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PublicTreeTargetV2'
        '404':
          description: 404 Not Found - Commodity tree not found or no associated collection found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
        '403':
          description: '403 Forbidden - Authentication or authorization failure. This status code is returned when: (1) the request lacks valid authentication credentials (missing or invalid X-Auth-Token header), or (2) the authenticated user does not have the required permission to access this resource.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessDeniedErrorDTO'
              examples:
                Access denied example:
                  summary: User lacks necessary permissions or authentication
                  value: "{\n        \"loggedIn\": true,\n        \"code\": \"access_denied\",\n        \"message\": \"Access denied: you don't have necessary permissions to access this resource\",\n        \"solution\": \"Contact support for appropriate permissions\"\n    }"
        '500':
          description: 500 Internal Server Error - An unexpected error occurred on the server. The request may or may not have been processed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Error - Server Error:
                  summary: Unexpected server error
                  value: "{\n        \"code\": \"internal_error\",\n        \"message\": \"An unexpected error occurred\",\n        \"solution\": \"Please try again later or contact support\"\n    }"
        '429':
          description: '429 Too Many Requests - API rate limit exceeded. The request has been rejected because the rate limit for this endpoint has been exceeded. Default rate limits: GET requests - 100 per 10 seconds, 500 per minute; POST/PUT/PATCH/DELETE requests - 20 per 10 seconds, 100 per minute. For increased access, please contact customer success.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiRateLimitResponse'
              examples:
                Rate limit exceeded example:
                  summary: API rate limit exceeded
                  value: "{\n        \"error\": \"API rate limit exceeded\",\n        \"message\": \"You have reached the maximum allowed requests. Please try again later or upgrade your plan for increased access\",\n        \"requestLimit\": 100,\n        \"requestCount\": 100,\n        \"limits\": [\n            {\n                \"requestLimit\": 100,\n                \"timeInSeconds\": 10\n            },\n            {\n                \"requestLimit\": 500,\n                \"timeInSeconds\": 60\n            }\n        ],\n        \"currentTime\": \"2026-01-15T10:30:00\",\n        \"nextResetAt\": \"2026-01-15T10:30:10\"\n    }"
  /public/v1/network/{collectionId}/tree-graph:
    get:
      tags:
      - Collections - Network
      summary: Get tree graph for a collection
      description: "\n⚠️ **DEPRECATED** - This endpoint is deprecated and will be removed at the end of December 2026.\n\n**Note**: Responses include a `Sunset` HTTP header (RFC 8594) indicating the removal date.\n\n---\n\nRetrieve a hierarchical tree structure showing supplier relationships within a collection.\n\nThis endpoint returns a tree graph representing the supply chain network, showing how suppliers\nare connected through multiple tiers. Each node in the tree represents a target (supplier/customer),\nand edges represent relationships between them.\n\n**Use Cases**:\n- Visualize supplier network structure\n- Analyze supply chain depth and breadth\n- Identify direct and indirect suppliers\n- Map relationships across multiple tiers\n\n**Filtering Options**:\n- **commodityIds**: Filter results to include only targets associated with specific commodities\n- **commodityTreeId**: Filter using a predefined commodity tree\n- **tierLevel**: Limit the depth of the tree (maximum 4 tiers)\n- **fetchParents**: Include parent organizations in the results\n\n**Response Format**:\nReturns an array of tree nodes, where each node contains:\n- Target information\n- Supplier relationships (nested structure)\n- Tier information\n- Edge source information\n\n**Required Permissions**: `ACCESS_PUBLIC_TREE_GRAPH` and `READ` on the collection\n\n**Performance Impact**: High\n        "
      operationId: treeGraph_1
      parameters:
      - name: collectionId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: commodityIds
        in: query
        required: false
        schema:
          type: array
          items:
            type: integer
            format: int32
      - name: commodityTreeId
        in: query
        required: false
        schema:
          type: integer
          format: int32
      - name: fetchParents
        in: query
        required: false
        schema:
          type: boolean
          default: true
      - name: tierLevel
        in: query
        required: false
        schema:
          maximum: 4
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PublicTreeTargetV1'
        '403':
          description: '403 Forbidden - Authentication or authorization failure. This status code is returned when: (1) the request lacks valid authentication credentials (missing or invalid X-Auth-Token header), or (2) the authenticated user does not have the required permission to access this resource.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessDeniedErrorDTO'
              examples:
                Access denied example:
                  summary: User lacks necessary permissions or authentication
                  value: "{\n        \"loggedIn\": true,\n        \"code\": \"access_denied\",\n        \"message\": \"Access denied: you don't have necessary permissions to access this resource\",\n        \"solution\": \"Contact support for appropriate permissions\"\n    }"
        '500':
          description: 500 Internal Server Error - An unexpected error occurred on the server. The request may or may not have been processed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Error - Server Error:
                  summary: Unexpected server error
                  value: "{\n        \"code\": \"internal_error\",\n        \"message\": \"An unexpected error occurred\",\n        \"solution\": \"Please try again later or contact support\"\n    }"
        '429':
          description: '429 Too Many Requests - API rate limit exceeded. The request has been rejected because the rate limit for this endpoint has been exceeded. Default rate limits: GET requests - 100 per 10 seconds, 500 per minute; POST/PUT/PATCH/DELETE requests - 20 per 10 seconds, 100 per minute. For increased access, please contact customer success.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiRateLimitResponse'
              examples:
                Rate limit exceeded example:
                  summary: API rate limit exceeded
                  value: "{\n        \"error\": \"API rate limit exceeded\",\n        \"message\": \"You have reached the maximum allowed requests. Pleas

# --- truncated at 32 KB (113 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/prewave/refs/heads/main/openapi/prewave-collections-network-api-openapi.yml