Prewave Suppliers - Supplier Graph API

⚠️ **DEPRECATED** - This API is deprecated and will be removed at the end of December 2026.

OpenAPI Specification

prewave-suppliers-supplier-graph-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Public Prewave Actions Suppliers - Supplier Graph 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: Suppliers - Supplier Graph
  description: ⚠️ **DEPRECATED** - This API is deprecated and will be removed at the end of December 2026.
paths:
  /public/v2/suppliers/{systemId}/{targetId}/supplier-graph:
    get:
      tags:
      - Suppliers - Supplier Graph
      summary: Get a tree-structure of suppliers of the given target
      description: "\n⚠️ **DEPRECATED** - This endpoint is deprecated and will be removed at the end of December 2026.\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/suppliers/{systemId}/{targetId}/supplier-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. Collection-Based Approach\n- **v2**: Works with individual target IDs\n- **v1**: Works with collections, allowing you to analyze multiple suppliers together\n- **v1**: Better integration with collection management workflows\n- **v1**: Collection-level configuration for consistent analysis settings\n\n### 2. Enhanced Functionality\n- **v2**: Basic supplier graph with limited configuration\n- **v1**: Advanced filtering through collection settings\n- **v1**: Configurable data sources (customs, media, predictions)\n- **v1**: Better control over scope (private, shared, public targets)\n\n### 3. Improved Consistency\n- **v2**: Target-specific endpoint\n- **v1**: Aligned with collection-based API design\n- **v1**: Consistent with other collection management endpoints\n\n### 4. Better Documentation\n- Comprehensive examples for all endpoints\n- Detailed error response documentation\n- Clear parameter descriptions\n- Migration guidance and best practices\n\n---\n\n## Quick Migration Guide\n\n### Step 1: Identify Collection ID\n\n**Important**: The v1 endpoint requires a collection ID instead of a target ID. If you don't have a collection yet:\n\n1. Create a collection using `POST /public/v1/collections`\n2. Add your target to the collection using `POST /public/v1/collections/{collectionId}/targets`\n3. Ensure the collection has tier-n enabled (`tiersEnabled: true`)\n\n### Step 2: Update Endpoint Call\n\n**Before:**\n```http\nGET /public/v2/suppliers/prewave/102006215/supplier-graph?tierLevel=3&commodityIds=101,102&filter={...}\n```\n\n**After:**\n```http\nGET /public/v1/collections/123/tier-n/data?tierLevel=3&commodityIds=101,102\n```\n\n### Step 3: Update Request Parameters\n\n**v2 Parameters:**\n- `systemId`: System identifier (path parameter)\n- `targetId`: Target identifier (path parameter)\n- `tierLevel`: Maximum tier level (query parameter, max 4)\n- `commodityIds`: List of commodity IDs (query parameter)\n- `filter`: Complex filter object (query parameter)\n- `commodityTreeId`: Commodity tree ID (query parameter)\n- `fetchParents`: Include parents (query parameter, default: true)\n\n**v1 Parameters:**\n- `collectionId`: Collection identifier (path parameter)\n- `tierLevel`: Maximum tier level (query parameter, max 4)\n- `commodityIds`: List of commodity IDs (query parameter)\n- `commodityTreeId`: Commodity tree ID (query parameter)\n- `fetchParents`: Include parents (query parameter, default: true)\n- Filter options can be configured in collection settings using `PUT /public/v1/collections/{collectionId}/tier-n/settings`\n\n### Step 4: Configure Collection Settings (Optional)\n\nFor advanced filtering, configure collection settings:\n\n```http\nPUT /public/v1/collections/123/tier-n/settings\n{\n  \"maxTier\": 3,\n  \"scopePrivate\": true,\n  \"scopeShared\": true,\n  \"sourceCustoms\": true,\n  \"sourceMedia\": true,\n  \"minShipments\": 5,\n  \"probability\": 75\n}\n```\n\n---\n\n## Breaking Changes\n\n1. **Endpoint Path**: Changed from `/public/v2/suppliers/{systemId}/{targetId}/supplier-graph` to `/public/v1/collections/{collectionId}/tier-n/data`\n2. **Path Parameters**:\n   - **v2**: Requires `systemId` and `targetId`\n   - **v1**: Requires `collectionId` (collection-based approach)\n3. **Filter Configuration**:\n   - **v2**: Filter passed as query parameter object\n   - **v1**: Filter options configured in collection settings or passed as separate query parameters\n4. **Response Structure**: May differ slightly - review response format\n5. **Collection Requirement**: v1 requires targets to be part of a collection\n\n---\n\n## Important Notes\n\n### Collection Requirement\n- The v1 endpoint requires targets to be part of a collection\n- If you're currently using this endpoint with individual targets, you'll need to:\n  1. Create or identify a collection containing your target\n  2. Ensure the collection has tier-n enabled (`tiersEnabled: true`)\n  3. Use the collection ID instead of target ID\n\n### Filter Migration\n- Complex filter objects from v2 should be migrated to collection settings\n- Use `GET /public/v1/collections/{collectionId}/tier-n/settings` to view current settings\n- Use `PUT /public/v1/collections/{collectionId}/tier-n/settings` to configure filters\n\n---\n\n**Performance Impact**: High\n\nFor detailed API reference and examples, see the v1 Collections Tier-N API documentation.\n"
      operationId: findSupplierGraph_1
      parameters:
      - name: systemId
        in: path
        description: The system ID is an identifier to determine from which the targetId might originate from. Supported systemIds are "prewave", "customer", "supplier", "own".
        required: true
        schema:
          type: string
        example: prewave
      - name: targetId
        in: path
        description: The target ID can be the target's prewaveId or an external id (edge number) representing the site in another system.
        required: true
        schema:
          type: string
        example: 10422185
      - name: tierLevel
        in: query
        description: Defines the maximum limit of tiers that should be fetched. Must be <=4
        required: false
        schema:
          maximum: 4
          type: integer
          format: int32
        example: 3
      - name: commodityIds
        in: query
        description: List of commodity ids to filter the supplier graph
        required: false
        schema:
          type: array
          items:
            type: integer
            format: int32
        example: 101, 102, 103
      - name: filter
        in: query
        description: "Filter object used for specifying limiting criteria for retrieving targets, affects both the targets and edge data in relation to the affected organization which queries the data.\n\n - **q**                     *[TARGET & EDGE]* - a query term by which target details (target name or existing edge details\n                                             (edge number WITHOUT edge number source are used as condition)\n\n - **collections**           *[TARGET]* - a list of collection ids to filter in any which the target needs to exist\n\n - **commodityIds**          *[TARGET & EDGE]* - a list of commodity infotag ids by which the target needs to be associated with any\n\n - **tt**                    *[TARGET]* - a list of target types the target needs to be assigned\n\n - **tier**                  *[EDGE]* - a list of tiers by which to filter the targets by, in relation to the organization as a supplier\n\n - **scope**                 *[EDGE]* - defines the visibilities of edge connections to the affected target\n                                    (if an edge is restricted to the affected customer it's 'Private',\n                                    otherwise it's 'Shared' if the edge is shared to the organization by\n                                    a different organization)\n\n - **source**                *[EDGE]* - determines edge source that should be considered (either 'Customer', 'Customs', 'Media' or 'PrewavePrediction')\n\n - **country**               *[TARGET]* - a list of infotag ids for countries which the target is assigned to any\n                                      (`country_id` column in the target, generally only for POI targets)\n\n - **hscode**                *[EDGE]* - a list of codes by which the target is associated to via an edge's HS code\n\n - **ods**                    *[TARGET]* - only direct suppliers (true/false)\n\n - **lastShipment**           *[EDGE]* - a date which determines a cut-off point after which the latest shipment must have happened regardless of HS Codes\n                                    (if `hscodes` are supplied it's already taken care of by the time this filter is applied, otherwise filters over all HS Codes)"
        required: true
        schema:
          $ref: '#/components/schemas/TargetSuppliersFilter'
      - name: commodityTreeId
        in: query
        description: Represents a collection of commodityIds
        required: false
        schema:
          type: integer
          format: int32
        example: 456
      - name: fetchParents
        in: query
        description: Defines whether the parents of the targets should be included in the result.
        required: false
        schema:
          type: boolean
          default: true
        example: true
      responses:
        '200':
          description: Successfully retrieved supplier graph
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PublicTreeTargetV2'
              examples:
                Supplier graph example:
                  summary: Sample supplier tree structure
                  description: Supplier graph example
                  value:
                  - target: 10422185
                    suppliers:
                    - target: 101641243
                      suppliers: []
                      targetInfo:
                        tier: 1
                        path:
                        - 10422185
                        collectionLevel: 1
                        collectionPath:
                        - 123
                        collectionPaths:
                        - - 123
                      edgeSource: Shared
                      edgeInfo:
                        hsCodes:
                        - code: '847330'
                          nShipments: 15
                        probability: 85.0
                      merged_targets: []
                    targetInfo:
                      tier: 0
                      path: []
                      collectionLevel: 0
                      collectionPath: []
                      collectionPaths: []
                    edgeSource: Public Media
                    edgeInfo: null
                    merged_targets: []
        '400':
          description: Invalid request parameters (e.g., tier level > 4)
          content:
            application/json: {}
        '404':
          description: Target not found or not accessible to the user
          content:
            application/json: {}
        '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/v1/suppliers/{systemId}/{targetId}/supplier-graph:
    get:
      tags:
      - Suppliers - Supplier Graph
      summary: Get a tree-structure of suppliers of the given target
      description: '

        ⚠️ **DEPRECATED** - This endpoint is deprecated and will be removed at the end of December 2026.


        ---


        ## Migration Required


        This endpoint has been replaced by the v1 Collections Tier-N API. Please migrate to the new endpoint:


        ### Replacement Endpoint


        | Old Endpoint | New Endpoint | Purpose |

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

        | `GET /public/v1/suppliers/{systemId}/{targetId}/supplier-graph` | `GET /public/v1/collections/{collectionId}/tier-n/data` | Get collection-based supplier graphs |


        ---


        ## Why Migrate?


        The v1 Collections Tier-N API provides significant improvements:


        ### 1. Collection-Based Approach

        - **v1**: Works with individual target IDs

        - **v1 Tier-N**: Works with collections, allowing you to analyze multiple suppliers together

        - **v1 Tier-N**: Better integration with collection management workflows

        - **v1 Tier-N**: Collection-level configuration for consistent analysis settings


        ### 2. Enhanced Functionality

        - **v1**: Basic supplier graph with limited configuration

        - **v1 Tier-N**: Advanced filtering through collection settings

        - **v1 Tier-N**: Configurable data sources (customs, media, predictions)

        - **v1 Tier-N**: Better control over scope (private, shared, public targets)


        ### 3. Improved Consistency

        - **v1**: Target-specific endpoint

        - **v1 Tier-N**: Aligned with collection-based API design

        - **v1 Tier-N**: Consistent with other collection management endpoints


        ### 4. Better Documentation

        - Comprehensive examples for all endpoints

        - Detailed error response documentation

        - Clear parameter descriptions

        - Migration guidance and best practices


        ---


        ## Quick Migration Guide


        ### Step 1: Identify Collection ID


        **Important**: The v1 Tier-N endpoint requires a collection ID instead of a target ID. If you don''t have a collection yet:


        1. Create a collection using `POST /public/v1/collections`

        2. Add your target to the collection using `POST /public/v1/collections/{collectionId}/targets`

        3. Ensure the collection has tier-n enabled (`tiersEnabled: true`)


        ### Step 2: Update Endpoint Call


        **Before:**

        ```http

        GET /public/v1/suppliers/prewave/102006215/supplier-graph?tierLevel=3&commodityIds=101,102&filter={...}

        ```


        **After:**

        ```http

        GET /public/v1/collections/123/tier-n/data?tierLevel=3&commodityIds=101,102

        ```


        ### Step 3: Update Request Parameters


        **v1 Parameters**:

        - `systemId`: System identifier (path parameter)

        - `targetId`: Target identifier (path parameter)

        - `tierLevel`: Maximum tier level (query parameter, max 4)

        - `commodityIds`: List of commodity IDs (query parameter)

        - `filter`: Complex filter object (query parameter)

        - `commodityTreeId`: Commodity tree ID (query parameter)

        - `fetchParents`: Include parents (query parameter, default: true)


        **v1 Tier-N Parameters**:

        - `collectionId`: Collection identifier (path parameter)

        - `tierLevel`: Maximum tier level (query parameter, max 4)

        - `commodityIds`: List of commodity IDs (query parameter)

        - `commodityTreeId`: Commodity tree ID (query parameter)

        - Filter options can be configured in collection settings using `PUT /public/v1/collections/{collectionId}/tier-n/settings`


        ### Step 4: Configure Collection Settings (Optional)


        For advanced filtering, configure collection settings:


        ```http

        PUT /public/v1/collections/123/tier-n/settings

        {

        "maxTier": 3,

        "scopePrivate": true,

        "scopeShared": true,

        "sourceCustoms": true,

        "sourceMedia": true,

        "minShipments": 5,

        "probability": 75

        }

        ```


        ---


        ## Breaking Changes


        1. **Endpoint Path**: Changed from `/public/v1/suppliers/{systemId}/{targetId}/supplier-graph` to `/public/v1/collections/{collectionId}/tier-n/data`

        2. **Path Parameters**:

        - **v1**: Requires `systemId` and `targetId`

        - **v1 Tier-N**: Requires `collectionId` (collection-based approach)

        3. **Filter Configuration**:

        - **v1**: Filter passed as query parameter object

        - **v1 Tier-N**: Filter options configured in collection settings or passed as separate query parameters

        4. **Response Structure**: May differ slightly - review response format

        5. **Collection Requirement**: v1 Tier-N requires targets to be part of a collection


        ---


        ## Important Notes


        ### Collection Requirement

        - The v1 Tier-N endpoint requires targets to be part of a collection

        - If you''re currently using this endpoint with individual targets, you''ll need to:

        1. Create or identify a collection containing your target

        2. Ensure the collection has tier-n enabled (`tiersEnabled: true`)

        3. Use the collection ID instead of target ID


        ### Filter Migration

        - Complex filter objects from v1 should be migrated to collection settings

        - Use `GET /public/v1/collections/{collectionId}/tier-n/settings` to view current settings

        - Use `PUT /public/v1/collections/{collectionId}/tier-n/settings` to configure filters


        ---


        **Required Permission**: `ACCESS_PUBLIC_SUPPLIER_GRAPH`


        **Performance Impact**: High


        For detailed API reference and examples, see the v1 Collections Tier-N API documentation.

        '
      operationId: findSupplierGraph_2
      parameters:
      - name: systemId
        in: path
        description: The system ID is an identifier to determine from which the targetId might originate from. Supported systemIds are "prewave", "customer", "supplier", "own".
        required: true
        schema:
          type: string
        example: prewave
      - name: targetId
        in: path
        description: The target ID can be the target's prewaveId or an external id (edge number) representing the site in another system.
        required: true
        schema:
          type: string
        example: 10422185
      - name: tierLevel
        in: query
        description: Defines the maximum limit of tiers that should be fetched. Must be <=4
        required: false
        schema:
          maximum: 4
          type: integer
          format: int32
        example: 3
      - name: commodityIds
        in: query
        description: List of commodity ids to filter the supplier graph
        required: false
        schema:
          type: array
          items:
            type: integer
            format: int32
        example: 101, 102, 103
      - name: commodityTreeId
        in: query
        description: Represents a collection of commodityIds
        required: false
        schema:
          type: integer
          format: int32
        example: 456
      - name: filter
        in: query
        description: "Filter object used for specifying limiting criteria for retrieving targets, affects both the targets and edge data in relation to the affected organization which queries the data.\n\n - **q**                     *[TARGET & EDGE]* - a query term by which target details (target name or existing edge details\n                                             (edge number WITHOUT edge number source are used as condition)\n\n - **collections**           *[TARGET]* - a list of collection ids to filter in any which the target needs to exist\n\n - **commodityIds**          *[TARGET & EDGE]* - a list of commodity infotag ids by which the target needs to be associated with any\n\n - **tt**                    *[TARGET]* - a list of target types the target needs to be assigned\n\n - **tier**                  *[EDGE]* - a list of tiers by which to filter the targets by, in relation to the organization as a supplier\n\n - **scope**                 *[EDGE]* - defines the visibilities of edge connections to the affected target\n                                    (if an edge is restricted to the affected customer it's 'Private',\n                                    otherwise it's 'Shared' if the edge is shared to the organization by\n                                    a different organization)\n\n - **source**                *[EDGE]* - determines edge source that should be considered (either 'Customer', 'Customs', 'Media' or 'PrewavePrediction')\n\n - **country**               *[TARGET]* - a list of infotag ids for countries which the target is assigned to any\n                                      (`country_id` column in the target, generally only for POI targets)\n\n - **hscode**                *[EDGE]* - a list of codes by which the target is associated to via an edge's HS code\n\n - **ods**                    *[TARGET]* - only direct suppliers (true/false)\n\n - **lastShipment**           *[EDGE]* - a date which determines a cut-off point after which the latest shipment must have happened regardless of HS Codes\n                                    (if `hscodes` are supplied it's already taken care of by the time this filter is applied, otherwise filters over all HS Codes)"
        required: true
        schema:
          $ref: '#/components/schemas/TargetSuppliersFilter'
      - name: fetchParents
        in: query
        description: Defines whether the parents of the targets should be included in the result.
        required: false
        schema:
          type: boolean
          default: true
        example: true
      responses:
        '200':
          description: Successfully retrieved supplier graph
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PublicTreeTargetV1'
              examples:
                Supplier graph example:
                  summary: Sample supplier tree structure
                  description: Supplier graph example
                  value:
                  - target: 10422185
                    suppliers:
                    - target: 101641243
                      suppliers: []
                      tier: 1
                      path:
                      - 10422185
                      edgeSource: Shared
                      merged_targets: []
                    tier: 0
                    path: []
                    edgeSource: Public Media
                    merged_targets: []
        '400':
          description: Invalid request parameters (e.g., tier level > 4)
          content:
            application/json: {}
        '404':
          description: Target not found or not accessible to the user
          content:
            application/json: {}
        '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              

# --- truncated at 32 KB (104 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/prewave/refs/heads/main/openapi/prewave-suppliers-supplier-graph-api-openapi.yml