Prewave Alerts API

Endpoints for retrieving alert information from user feeds, disruption maps, and specific targets. Supports filtering by collections, dates, priorities, geographic regions, target identifiers, and other criteria.

OpenAPI Specification

prewave-alerts-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Public Prewave Actions Alerts 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: Alerts
  description: Endpoints for retrieving alert information from user feeds, disruption maps, and specific targets. Supports filtering by collections, dates, priorities, geographic regions, target identifiers, and other criteria.
paths:
  /public/v2/feed:
    get:
      tags:
      - Alerts
      summary: Get all alerts of the current user's feed (V2)
      description: "\nRetrieve all alerts for targets that are in collections with feed delivery enabled. Results are ordered by newest first. V2 uses the same filtering and feed logic as the Prewave dashboard.\n\n**Response:** A `Page` containing a list of alert objects. Standard pagination fields: `content`, `totalElements`, `totalPages`, `size`, `number`, `first`, `last`. Each alert includes id, title, timestamps (ISO 8601 UTC), event, priority, classification, locations, links, media, primary/mentioned targets, collection paths, and optional geo (see `includeGeo`).\n\n**Pagination:** Use query parameters `page` (0-based index) and `size` (items per page). Default page size is 20 when not specified.\n\n**Required permission:** `access_public_user_feed`\n\n**Note:** Geographic information (`geo`) is only included when `includeGeo=true`. Fields with null values are omitted from the JSON response.\n\n---\n\n## Migration from V1 (`/public/v1/feed`)\n\n### What changed\n\n| Aspect | V1 | V2 |\n|--------|----|----|\n| **URL** | `/public/v1/feed` | `/public/v2/feed` |\n| **Collections** | `collectionId` (singular) | `collectionIds` (plural); same comma-separated IDs |\n| **Date filter** | `from` or `newerThan` (milliseconds) | `from` only; UTC ISO 8601 (e.g. `2024-01-01T00:00:00Z`) |\n| **Omit date** | (varies) | Last **90 days** of data |\n| **Timestamps in response** | Numeric (e.g. milliseconds) | **ISO 8601 strings in UTC** for `createdAt`, `predictedAtStart`, `predictedAtEnd` |\n\n### What is new in V2\n\n- **Tier control:** `minTier` and `maxTier` to include specific supply chain tiers (Tier 1 = direct suppliers, Tier 2 = their suppliers, etc.). Omit both for Tier 1 only (default).\n- **Classification:** `isSituationReport`, `active`, `relevancy` on each alert.\n- **Structured metadata:** `eventTypes`, `eventTypeGroups`, `alertTypes`, `labels`—easier to filter and display than the previous `infotags` list.\n- **Context:** `mentionedTargets`, `previousAlerts`, `flagged`, `useCaseDetails` for richer context.\n- **Performance:** V2 is significantly faster than V1—lower latency and higher throughput.\n\n### What is removed in V2\n\n- **`statusId`** — no longer returned.\n- **`infotags`** — use the new structured fields instead: `eventTypes`, `eventTypeGroups`, `alertTypes`, `labels`.\n        "
      operationId: alertFeed
      parameters:
      - name: collectionIds
        in: query
        description: Collection IDs to filter the feed by. Only alerts for targets in these collections will be returned. In V1 this was collectionId (singular); same comma-separated IDs.
        required: false
        schema:
          uniqueItems: true
          type: array
          items:
            type: integer
            format: int32
        example: 123, 456
      - name: from
        in: query
        description: Start of the date range (inclusive). Use UTC ISO 8601 format (e.g. `2024-01-01T00:00:00Z`). If omitted, V2 returns alerts from the last 90 days filtered by `createdAt`. In V1 you could use `newerThan` (milliseconds) or `from`; V2 uses `from` only.
        required: false
        schema:
          type: string
          format: date-time
        example: '2024-01-01T00:00:00Z'
      - name: perspectiveId
        in: query
        description: Perspective ID to filter the feed by. Defaults to the user's default perspective.
        required: false
        schema:
          type: integer
          format: int32
        example: 1
      - name: priorities
        in: query
        description: 'List of priorities to filter the feed by Allowed values: Low, Mid, High, Critical (comma-separated).'
        required: false
        schema:
          type: array
          items:
            type: string
            enum:
            - Low
            - Mid
            - High
            - Critical
        example: High, Critical
      - name: includeGeo
        in: query
        description: If set to true, the response will include the geo information. Set to true when you need coordinates or shapes for mapping.
        required: false
        schema:
          type: boolean
          default: false
        example: true
      - name: impactLevelIds
        in: query
        description: Impact level IDs to filter the feed by. Valid IDs depend on your tenant configuration.
        required: false
        schema:
          uniqueItems: true
          type: array
          items:
            type: integer
            format: int32
        example: 1, 2
      - name: minTier
        in: query
        description: Minimum supply chain tier depth to include (V2 only). Tier 1 = direct suppliers, Tier 2 = their suppliers, etc. Default 1. Must be ≤ maxTier; max value 5.
        required: false
        schema:
          maximum: 5
          minimum: 1
          type: integer
          format: int32
          default: 1
        example: 1
      - name: maxTier
        in: query
        description: Maximum supply chain tier depth to include (V2 only). Tier 1 = direct suppliers, Tier 2 = their suppliers, etc. Default 1. Must be ≥ minTier; max value 5.
        required: false
        schema:
          maximum: 5
          minimum: 1
          type: integer
          format: int32
          default: 1
        example: 1
      - name: pageable
        in: query
        required: true
        schema:
          $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: Successfully retrieved alerts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SchemaPublicAlertV2DTO'
              examples:
                Alert feed with results:
                  summary: Paginated feed containing one alert with V2 structured metadata
                  description: Alert feed with results
                  value: '{"content":[{"id":12345,"uuid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","title":"Labor strike begins at Acme Manufacturing Inc","createdAt":1768473000.000000000,"predictedAtStart":1768456800.000000000,"predictedAtEnd":null,"description":"Workers at Acme Manufacturing Inc began a strike affecting production lines.","isSituationReport":false,"event":{"uuid":"b2c3d4e5-f6a7-8901-bcde-f23456789012"},"active":true,"relevancy":"Relevant","locations":[{"id":102006216,"name":"Acme Manufacturing Plant","sname":null,"logo":null,"backgroundPicture":null,"description":null,"website":null,"location":"Sample City, US","yearFounded":null,"size":null,"screened":true,"screenedStatus":null,"linkedInId":null,"type":{"id":1,"type":"organization","displayName":"Site Group","pluralName":"Site Groups","ordering":null,"scoring":null},"ctype":{"id":1,"ctype":"company","targetTypeId":1,"displayName":"Company","pluralName":"Companies","icon":"fas fa-building","ordering":null,"priority":0,"connectable":false,"bgColor":"#cccccc","textColor":"#000000"},"geo":{"geometry":null,"properties":{"name":null,"countryCode":null,"alertCount":null,"boundingBox":null},"type":"Feature"},"geoShape":{"geometry":null,"properties":{"name":null,"countryCode":null,"alertCount":null,"boundingBox":null},"type":"Feature"},"parents":[],"organization":null,"industries":[],"monitoredSince":null,"earliestAlert":null,"ordering":null,"disruptionStatusUpdate":null,"own":false,"managed":false,"isPublic":null,"connectionContactsCount":null,"population":null,"following":false,"collectionFollowing":false,"tier":1,"path":[],"collectionLevel":null,"collectionPath":[],"collectionPaths":[],"foreignSystems":[],"scoreAvail":"None","revenue":null,"impact":null,"hsCode":[],"mergedTargets":[]}],"links":[{"id":null,"url":"https://example.com/news/labor-strike-acme-manufacturing","title":"Labor strike begins at Acme Manufacturing Inc","description":"Workers at Acme Manufacturing Inc began a strike affecting production lines.","pictureUrl":null,"originalLang":null,"originalTitle":null,"originalDescription":null}],"media":[],"primaryTargets":[{"target":{"id":102006215,"name":"Acme Manufacturing Inc","sname":null,"logo":null,"backgroundPicture":null,"description":null,"website":null,"location":"Sample City, US","yearFounded":null,"size":null,"screened":true,"screenedStatus":null,"linkedInId":null,"type":{"id":1,"type":"organization","displayName":"Site Group","pluralName":"Site Groups","ordering":null,"scoring":null},"ctype":{"id":1,"ctype":"company","targetTypeId":1,"displayName":"Company","pluralName":"Companies","icon":"fas fa-building","ordering":null,"priority":0,"connectable":false,"bgColor":"#cccccc","textColor":"#000000"},"geo":{"geometry":null,"properties":{"name":null,"countryCode":null,"alertCount":null,"boundingBox":null},"type":"Feature"},"geoShape":{"geometry":null,"properties":{"name":null,"countryCode":null,"alertCount":null,"boundingBox":null},"type":"Feature"},"parents":[],"organization":null,"industries":[],"monitoredSince":null,"earliestAlert":null,"ordering":null,"disruptionStatusUpdate":null,"own":false,"managed":false,"isPublic":null,"connectionContactsCount":null,"population":null,"following":false,"collectionFollowing":false,"tier":1,"path":[],"collectionLevel":null,"collectionPath":[],"collectionPaths":[],"foreignSystems":[],"scoreAvail":"None","revenue":null,"impact":null,"hsCode":[],"mergedTargets":[]},"impactLevel":{"id":4222469,"level":"company","displayName":"Site Group","ordering":10},"impactScore":"High","priority":"High"}],"mentionedTargets":[{"id":102006217,"name":"Pacific Components Ltd","sname":null,"logo":null,"backgroundPicture":null,"description":null,"website":null,"location":"Port City, US","yearFounded":null,"size":null,"screened":true,"screenedStatus":null,"linkedInId":null,"type":{"id":1,"type":"organization","displayName":"Site Group","pluralName":"Site Groups","ordering":null,"scoring":null},"ctype":{"id":1,"ctype":"company","targetTypeId":1,"displayName":"Company","pluralName":"Companies","icon":"fas fa-building","ordering":null,"priority":0,"connectable":false,"bgColor":"#cccccc","textColor":"#000000"},"geo":{"geometry":null,"properties":{"name":null,"countryCode":null,"alertCount":null,"boundingBox":null},"type":"Feature"},"geoShape":{"geometry":null,"properties":{"name":null,"countryCode":null,"alertCount":null,"boundingBox":null},"type":"Feature"},"parents":[],"organization":null,"industries":[],"monitoredSince":null,"earliestAlert":null,"ordering":null,"disruptionStatusUpdate":null,"own":false,"managed":false,"isPublic":null,"connectionContactsCount":null,"population":null,"following":false,"collectionFollowing":false,"tier":2,"path":[],"collectionLevel":null,"collectionPath":[],"collectionPaths":[],"foreignSystems":[],"scoreAvail":"None","revenue":null,"impact":null,"hsCode":[],"mergedTargets":[]}],"priority":"High","priorityDetails":{"massDisruption":true,"brandMention":false,"rumour":false,"lowPeerRisk":false,"terminates":false},"previousAlerts":[{"alertId":12340,"eventId":5678,"title":"Labor strike announced at Acme Manufacturing Inc","description":"Union announces planned strike action beginning next week.","createdAt":1768032000.000000000}],"flagged":{"reason":"Needs review","comment":"Escalated for supplier risk assessment","flaggedAt":1768474800.000000000},"useCaseDetails":{"relevant":true,"reason":"Direct tier-1 supplier in monitored collection"},"labels":[{"id":42,"scope":"Customer","name":"High impact","bgColor":"#FF5733","textColor":"#FFFFFF"}],"eventTypes":[{"id":501,"value":"Labor dispute","svalue":"labor_dispute","icon":"fa-kit fa-strike"}],"eventTypeGroups":[{"id":10,"name":"Labor and workforce","sname":"labor_workforce","eventTypeIds":[501]}],"alertTypes":[{"id":201,"value":"happens","svalue":"happens","icon":"fa-kit fa-alert"}],"collectionPath":[{"id":123,"name":"Tier 1 suppliers","path":[{"id":1,"name":"Supply chain monitoring"},{"id":123,"name":"Tier 1 suppliers"}]}],"geo":{"geometry":null,"properties":{"name":null,"countryCode":null,"alertCount":null,"boundingBox":null},"type":"Feature"}}],"pageable":{"pageNumber":0,"pageSize":20,"sort":{"empty":true,"sorted":false,"unsorted":true},"offset":0,"paged":true,"unpaged":false},"totalPages":1,"totalElements":1,"last":true,"size":20,"number":0,"numberOfElements":1,"sort":{"empty":true,"sorted":false,"unsorted":true},"first":true,"empty":false}'
                Empty alert feed:
                  summary: No alerts match the current filters
                  description: Empty alert feed
                  value: '{"content":[],"pageable":{"pageNumber":0,"pageSize":20,"sort":{"empty":true,"sorted":false,"unsorted":true},"offset":0,"paged":true,"unpaged":false},"totalPages":0,"totalElements":0,"last":true,"size":20,"number":0,"numberOfElements":0,"sort":{"empty":true,"sorted":false,"unsorted":true},"first":true,"empty":true}'
        '400':
          description: Bad Request - Invalid parameters (e.g. invalid date format, tier bounds, or priority values)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
              examples:
                Invalid request parameters:
                  summary: Error when a query parameter has an invalid value
                  description: Invalid request parameters
                  value: '{"code":"invalid_request","message":"Email must be a valid email address."}'
        '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/target/{systemId}/{targetId}/alerts:
    get:
      tags:
      - Alerts
      summary: Get alerts for a specific target
      description: "\nRetrieve alerts for a specific target identified by system ID and target ID.\n\nThis endpoint returns paginated alerts for a single target, supporting foreign system ID mapping.\nThe target can be identified using Prewave internal IDs or foreign system IDs (e.g., customer,\nsupplier, SAP IDs).\n\n**Response:**\nReturns a paginated list of alert objects. Each alert includes basic information (id, uuid, title, timestamps), event grouping, priority and classification details, location/geographic data, source links and media, infotags, primary target information, and collection paths. The response is wrapped in a Spring Data `Page` object with standard pagination fields. See the response schema for complete field definitions.\n\n**Note**: Fields with null values are omitted from the JSON response. This is standard JSON serialization behavior. Geographic information (`geo`) is only available if `includeGeo` query parameter is set to `true`.\n\n**Use Cases**:\n- Monitor alerts for a specific supplier\n- Track alerts for targets identified by external system IDs\n- Filter alerts by priority, date, or perspective\n- Export target-specific alerts for reporting\n\n**Target Identification**:\n- Supports Prewave internal IDs (`systemId=\"prewave\"`)\n- Supports foreign system IDs (e.g., `systemId=\"customer\"`, `systemId=\"supplier\"`)\n- Automatically resolves foreign IDs to Prewave target IDs\n\n**Filtering Options**:\n- **priorities**: Filter by alert priority levels (Low, Mid, High, Critical)\n- **newerThan**: Filter alerts newer than a timestamp (milliseconds)\n- **perspectiveId**: Filter by perspective (defaults to user's perspective)\n- **includeGeo**: Include geographic coordinates in response\n\n**Pagination**:\n- Results are paginated (default: 20 items per page)\n- Use `page` and `size` query parameters to control pagination\n\n**Required Permission**: `access_public_target_feed`\n\n**Performance Impact**: Medium\n    "
      operationId: targetAlerts
      parameters:
      - name: systemId
        in: path
        description: An identifier that indicates which system the targetId originates from. Supported values 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: 102006215
      - name: newerThan
        in: query
        description: Only return alerts that are newer than the given timestamp (Timestamp in milliseconds since epoch)
        required: false
        schema:
          type: integer
          format: int64
        example: 1705312800000
      - name: priorities
        in: query
        description: List of priorities to filter the feed by
        required: false
        schema:
          type: array
          items:
            type: string
            enum:
            - Low
            - Mid
            - High
            - Critical
        example: High,Critical
      - name: includeGeo
        in: query
        description: If set to true, the response will include the geo information.
        required: false
        schema:
          type: boolean
        example: true
      - name: perspectiveId
        in: query
        description: The perspective ID to filter the alerts. If not provided, the user's perspective ID will be used.
        required: false
        schema:
          type: integer
          format: int32
        example: 1
      - name: pageable
        in: query
        required: true
        schema:
          $ref: '#/components/schemas/Pageable'
      responses:
        '200':
          description: Successfully retrieved target alerts
          content:
            application/json:
              schema:
                type: object
                properties:
                  content:
                    type: array
                    items:
                      $ref: '#/components/schemas/PublicAlertDTO'
                  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
              examples:
                Target alerts example:
                  summary: Sample paginated alerts response for a target
                  description: Target alerts example
                  value: '{"content":[{"id":12345,"uuid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","title":"Insolvency announced at Acme Manufacturing Inc","createdAt":1704067200000,"predictedAtStart":1703980800000,"predictedAtEnd":1704067199000,"description":"Insolvency announced for Acme Manufacturing Inc on 15-01-2025","event":{"uuid":"b2c3d4e5-f6a7-8901-bcde-f23456789012"},"statusId":null,"locations":[],"links":[{"id":null,"url":"https://example.com/news/insolvency-acme-manufacturing","title":"Insolvency announced for Acme Manufacturing Inc","description":"Insolvency announced for Acme Manufacturing Inc on 15-01-2025","pictureUrl":null,"originalLang":null,"originalTitle":null,"originalDescription":null}],"media":[],"infotags":[{"id":1001,"type":{"type":"event_type","active":true,"displayName":"Event Type","icon":null,"ordering":10001,"display":true},"value":"Insolvency","svalue":"insolvency","icon":"fa-kit fa-financial-stress","numValue":null,"priority":null,"impactScore":null}],"primaryTargets":[{"target":{"id":102006215,"name":"Acme Manufacturing Inc","sname":null,"logo":null,"backgroundPicture":null,"description":null,"website":null,"location":"Sample City, US","yearFounded":null,"size":null,"screened":true,"screenedStatus":null,"linkedInId":null,"type":{"id":1,"type":"organization","displayName":"Site Group","pluralName":"Site Groups","ordering":null,"scoring":null},"ctype":{"id":1,"ctype":"company","targetTypeId":1,"displayName":"Company","pluralName":"Companies","icon":"fas fa-building","ordering":null,"priority":0,"connectable":false,"bgColor":"#cccccc","textColor":"#000000"},"geo":{"geometry":null,"properties":{"name":null,"countryCode":null,"alertCount":null,"boundingBox":null},"type":"Feature"},"geoShape":{"geometry":null,"properties":{"name":null,"countryCode":null,"alertCount":null,"boundingBox":null},"type":"Feature"},"parents":[],"organization":null,"industries":[],"monitoredSince":null,"earliestAlert":null,"ordering":null,"disruptionStatusUpdate":null,"own":false,"managed":false,"isPublic":null,"connectionContactsCount":null,"population":null,"following":false,"collectionFollowing":false,"tier":null,"path":[],"collectionLevel":null,"collectionPath":[],"collectionPaths":[],"foreignSystems":[],"scoreAvail":"None","revenue":null,"impact":null,"hsCode":[],"mergedTargets":[]},"impactLevel":{"id":4222469,"level":"company","displayName":"Site Group","ordering":10},"impactScore":null,"priority":"Mid"}],"priority":"Critical","priorityDetails":{"massDisruption":false,"brandMention":false,"rumour":false,"lowPeerRisk":false,"terminates":false},"collectionPath":[],"geo":null}],"pageable":{"pageNumber":0,"pageSize":20,"sort":{"empty":true,"sorted":false,"unsorted":true},"offset":0,"paged":true,"unpaged":false},"totalPages":1,"totalElements":1,"last":true,"size":20,"number":0,"numberOfElements":1,"sort":{"empty":true,"sorted":false,"unsorted":true},"first":true,"empty":false}'
        '400':
          description: Bad Request - Invalid parameters (e.g., invalid timestamp, invalid priority values)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
        '404':
          description: Target not found or foreign system ID mapping not found
          content:
            application/json:
              examples:
                Target not found:
                  summary: Error when target ID is invalid
                  description: Target not found
                  value: '{"code":"resource_not_found","message":"Target not found: systemId=customer, targetId=INVALID_ID","solution":"Verify target ID and system ID are correct"}'
        '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\": 10

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