Prewave Disruptions API
Endpoints for retrieving alerts from the disruption map. Supports filtering by geographic region, collections, countries, and other criteria.
Endpoints for retrieving alerts from the disruption map. Supports filtering by geographic region, collections, countries, and other criteria.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/prewave-disruptions-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Public Prewave Actions Disruptions 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: Disruptions
description: Endpoints for retrieving alerts from the disruption map. Supports filtering by geographic region, collections, countries, and other criteria.
paths:
/public/v1/disruptions/alerts:
get:
tags:
- Disruptions
summary: Find alerts on disruption map
description: "\n### Overview\nRetrieve alerts displayed on the disruption map filtered by geographic region, collections, and other criteria.\n\nThis endpoint returns alerts that are visible on the disruption map interface, allowing you to query\nalerts by geographic bounding boxes, collections, countries, and various filter criteria.\n\n### Response\nReturns an array of alert objects. Each alert includes basic information (id, uuid, title, timestamps),\nevent grouping, priority and classification details, location/geographic data, source links and media,\ninfotags, primary target information, and collection paths. Unlike paginated endpoints, this endpoint\nreturns all matching alerts in a single array without pagination metadata.\n\n**Note**: Fields with null values are omitted from the JSON response. Geographic information (`geo`)\nis only available if `includeGeo` query parameter is set to `true`.\n\n### Use Cases\n- **Regional monitoring**: Monitor alerts in specific geographic regions.\n- **Pattern analysis**: Analyze disruption patterns by location.\n- **Collection filtering**: Filter alerts by collections and countries.\n- **Integration**: Integrate disruption map data into external systems.\n\n### Geographic Filtering\n- **bound**: Bounding box defining the geographic area to search (format: `bound=xmin,ymin,xmax,ymax`).\n- **previousBound**: Previous bounding box for incremental updates (optional).\n- **countryId**: Filter by country (obtain country IDs from `GET /public/v1/infotags` filtered by location type).\n\n### Collection Filtering\n- **collectionIds**: Filter alerts by specific collections (obtain collection IDs from `GET /public/v1/collections`).\n- **showAllAlerts**: If true, ignore collectionIds and show all accessible alerts.\n\n### Filter Objects\n- **poiFilter**: Filter by Point of Interest (POI) criteria.\n- **alertFilter**: Filter by alert-specific criteria (perspectiveId is required; eventTypeId, industryIds optional).\n\n### Required Permissions\n`access_public_disruption_alerts`, `access_featured_collection`\n\n### Performance Impact\nMedium\n "
operationId: findAlerts
parameters:
- name: collectionIds
in: query
description: Collection IDs to show alerts for. Obtain collection IDs from GET /public/v1/collections. If empty and showAllAlerts is false, no alerts will be returned.
required: false
schema:
type: array
items:
type: integer
format: int32
example: 123,456
- name: showAllAlerts
in: query
description: If true, show all accessible alerts and ignore the collectionIds parameter. If false, only alerts for the specified collections are returned.
required: false
schema:
type: boolean
example: false
- name: countryId
in: query
description: 'Country ID to filter alerts by. Obtain country IDs from the infotags endpoint (GET /public/v1/infotags) filtered by location type. Note: Country codes are not currently supported; use country ID instead.'
required: false
schema:
type: integer
format: int32
example: 1
- name: includeGeo
in: query
description: If set to true, the response will include the geo information.
required: false
schema:
type: boolean
example: true
- name: bound
in: query
description: 'Bounding box defining the geographic area to search. Format: bound=xmin,ymin,xmax,ymax. Example: bound=16.0,48.0,16.5,48.5'
required: false
schema:
type: array
items:
type: integer
format: int32
- name: previousBound
in: query
description: Previous bounding box for incremental updates. Used to optimize queries when updating a map view.
required: false
schema:
type: array
items:
type: integer
format: int32
- name: industryIds
in: query
required: false
schema:
type: array
items:
type: integer
format: int32
- name: tokens
in: query
required: false
schema:
type: array
items:
type: string
- name: poiCTypeId
in: query
required: false
schema:
type: integer
format: int32
- name: companyId
in: query
required: false
schema:
type: integer
format: int32
- name: disruptionStatusId
in: query
required: false
schema:
type: integer
format: int32
- name: tiers
in: query
required: false
schema:
type: array
items:
type: integer
format: int32
- name: scopes
in: query
required: false
schema:
type: array
items:
type: string
enum:
- Private
- Shared
- Public
- name: source
in: query
required: false
schema:
type: string
description: Source of the supplier relationship edge
enum:
- Customer
- Media
- Customs
- PrewavePrediction
- name: perspectiveId
in: query
required: true
schema:
type: integer
format: int32
- name: eventTypeId
in: query
required: false
schema:
type: integer
format: int32
responses:
'200':
description: Successfully retrieved alerts.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PublicAlertDTO'
examples:
Regional alerts example:
summary: Sample alerts response for a geographic region
description: Regional alerts example
value: '[{"id":12345,"uuid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","title":"Flood happens in Sample City, Sample Region, US (and 10 others)","createdAt":1704067200000,"predictedAtStart":1703980800000,"predictedAtEnd":1704067199000,"description":"Flood occurred in Sample Region affecting multiple locations.","event":{"uuid":"b2c3d4e5-f6a7-8901-bcde-f23456789012"},"statusId":null,"locations":[],"links":[{"id":null,"url":"https://example.com/news/flood-sample-region","title":"Flood affects Sample Region","description":"Flood occurred in Sample Region affecting multiple locations.","pictureUrl":null,"originalLang":null,"originalTitle":null,"originalDescription":null}],"media":[],"infotags":[{"id":1001,"type":{"type":"alert_type","active":false,"displayName":"Alert Status","icon":"far fa-bell","ordering":1,"display":true},"value":"happens / occurs","svalue":"happens","icon":null,"numValue":null,"priority":null,"impactScore":null},{"id":2001,"type":{"type":"event_type","active":false,"displayName":"Event Type","icon":null,"ordering":10001,"display":true},"value":"Flood","svalue":"flood","icon":"fas fa-water","numValue":null,"priority":"High","impactScore":null}],"primaryTargets":[],"priority":"High","priorityDetails":{"massDisruption":true,"brandMention":false,"rumour":false,"lowPeerRisk":false,"terminates":false},"collectionPath":[],"geo":{"geometry":null,"properties":{"name":null,"countryCode":null,"alertCount":null,"boundingBox":null},"type":"Feature"}}]'
'400':
description: Bad Request - Invalid parameters (e.g., invalid bounding box coordinates, invalid filter format).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDTO'
examples:
Invalid bounding box:
summary: Error when bounding box coordinates are invalid
description: Invalid bounding box
value: '{"code":"invalid_request","message":"Invalid bounding box: north must be greater than south","solution":"Ensure bounding box coordinates are valid (north > south, east > west)"}'
'404':
description: Collection not found or not accessible.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorDTO'
examples:
Collection not found:
summary: Error when collection ID is invalid
description: Collection not found
value: '{"code":"resource_not_found","message":"Collection [999] not found","solution":"Verify collection IDs using GET /public/v1/collections"}'
'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 }"
components:
schemas:
PublicHSCode:
required:
- code
type: object
properties:
code:
type: string
example: null
nShipments:
type:
- integer
- 'null'
format: int32
writeOnly: true
example: null
nshipments:
type: integer
format: int32
example: null
description: List of HS Codes of the target
example: null
PublicAlertDTO:
required:
- collectionPath
- createdAt
- event
- id
- infotags
- links
- locations
- media
- primaryTargets
- uuid
type: object
properties:
id:
type: integer
description: Prewave-internal alert id
format: int32
example: null
uuid:
type: string
description: Prewave-internal alert uuid
format: uuid
example: null
title:
type:
- string
- 'null'
description: Alert title
example: Hurricane happens at Norsk Hydro in Høyanger, NO
createdAt:
type: string
description: When the alert was generated/created at prewave
format: date-time
example: null
predictedAtStart:
type:
- string
- 'null'
description: When the event - that this alert is describing - started
format: date-time
example: null
predictedAtEnd:
type:
- string
- 'null'
description: When the event - that this alert is describing - ended
format: date-time
example: null
description:
type:
- string
- 'null'
description: Detailed description of alert. Usually an excerpt taken from one of the links
example: It's windy in Høyanger
event:
$ref: '#/components/schemas/PublicEventDTO'
statusId:
type:
- integer
- 'null'
description: Replaced with alert-relevancy
format: int32
deprecated: true
example: null
locations:
type: array
description: Locations where the alert happened
items:
$ref: '#/components/schemas/PublicTargetDTO'
example: null
links:
type: array
description: Source links the alert is based on
items:
$ref: '#/components/schemas/PublicLinkDTO'
example: null
media:
type: array
description: Media files attached to the alert
items:
$ref: '#/components/schemas/PublicMediaDTO'
example: null
infotags:
type: array
items:
$ref: '#/components/schemas/PublicInfotagDTO'
example: null
primaryTargets:
type: array
description: The targets affected by this alert.
items:
$ref: '#/components/schemas/PublicAlertTargetDTO'
example: null
priority:
type:
- string
- 'null'
description: Priority of alert
enum:
- Low
- Mid
- High
- Critical
example: null
priorityDetails:
allOf:
- $ref: '#/components/schemas/PublicPriorityDetailsDTO'
example: null
collectionPath:
type: array
description: The collections and their hierarchy for the target
items:
$ref: '#/components/schemas/PublicCollectionPathRef'
example: null
geo:
$ref: '#/components/schemas/Geo'
example: null
Connection:
required:
- createdAt
- customer1Id
- customer2Id
- initiatorCustomerId
- pending
- state
- targetCustomerId
type: object
properties:
customer1Id:
type: integer
format: int32
example: null
customer2Id:
type: integer
format: int32
example: null
initiatorCustomerId:
type: integer
format: int32
example: null
state:
type: string
enum:
- Confirmed
- Rejected
- Failed
example: null
pending:
type: boolean
example: null
initiatorId:
type:
- integer
- 'null'
format: int32
example: null
comment:
type:
- string
- 'null'
example: null
email:
type:
- string
- 'null'
example: null
text:
type:
- string
- 'null'
example: null
createdAt:
type: string
format: date-time
example: null
targetCustomerId:
type: integer
format: int32
example: null
example: null
RiskAnalysisType:
required:
- availablePerspectives
- hideDetails
- products
- recommended
- scoping
- tierNAnalysisEnabled
- type
type: object
properties:
type:
type: string
enum:
- Default
- LkSG
- Norwegian Transparancy Act
- CSDDD (Beta)
- EU Battery Regulation
example: null
hideDetails:
type: boolean
example: null
recommended:
type: boolean
example: null
tierNAnalysisEnabled:
type: boolean
example: null
scoping:
type: boolean
example: null
products:
type: boolean
example: null
component:
type:
- string
- 'null'
enum:
- PeerScore
- AlertScore
- SSAScore
- ExternalScore
- TierNScore
example: null
perspectiveId:
type:
- integer
- 'null'
format: int32
example: null
availablePerspectives:
type: array
items:
$ref: '#/components/schemas/PerspectiveDTO'
example: null
countryScoreThreshold:
type:
- number
- 'null'
format: double
example: null
industryScoreThreshold:
type:
- number
- 'null'
format: double
example: null
purchaseVolumeThreshold:
type:
- number
- 'null'
format: double
example: null
example: null
CollectionDTO:
required:
- children
- collectionTreeFilter
- commodityFilter
- deliverySettingTypes
- id
- isMonitored
- isParentMonitored
- lanes
- level
- name
- own
- path
- scope
- tiersEnabled
- type
- uuid
type: object
properties:
id:
type: integer
format: int32
example: null
uuid:
type: string
format: uuid
example: null
scope:
type: string
enum:
- User
- Customer
- Featured
example: null
type:
type: string
enum:
- Default
- Commodity
- Ariba
example: null
collection:
type:
- string
- 'null'
example: null
name:
type: string
example: null
user:
$ref: '#/components/schemas/UserDTO'
deliverySettingTypes:
type: array
items:
$ref: '#/components/schemas/DeliverySettingTypeDTO'
example: null
logo:
type:
- string
- 'null'
example: null
count:
type:
- integer
- 'null'
format: int32
example: null
isMonitored:
type: boolean
example: null
isParentMonitored:
type: boolean
example: null
own:
type: boolean
example: null
lanes:
type: boolean
example: null
tiersEnabled:
type: boolean
example: null
tierSettings:
allOf:
- $ref: '#/components/schemas/TierSettingsDTO'
example: null
collectionTreeFilter:
type: array
items:
type: integer
format: int32
example: null
example: null
userId:
type:
- integer
- 'null'
format: int32
example: null
customerId:
type:
- integer
- 'null'
format: int32
example: null
organizationId:
type:
- integer
- 'null'
format: int32
example: null
viewedWithRole:
type:
- string
- 'null'
enum:
- Manager
- Editor
example: null
parentId:
type:
- integer
- 'null'
format: int32
example: null
children:
type: array
items:
$ref: '#/components/schemas/CollectionDTO'
example: null
level:
type: integer
format: int32
example: null
path:
type: array
items:
$ref: '#/components/schemas/CollectionRef'
example: null
commodityFilter:
type: array
items:
$ref: '#/components/schemas/CommodityFilterId'
example: null
updatedAt:
type:
- string
- 'null'
format: date-time
example: null
monitored:
type: boolean
writeOnly: true
example: null
parentMonitored:
type: boolean
writeOnly: true
example: null
example: null
TierSettingsDTO:
required:
- logisticsProvider
- maxTier
- scopePrivate
- scopePublic
- scopeShared
- sourceCustomer
- sourceCustoms
- sourceMedia
- sourcePrewavePrediction
- suspectedSuppliers
- tier2MinPrio
- tier2TargetPrio
- tier3PlusMinPrio
- tier3PlusTargetPrio
type: object
properties:
maxTier:
type: integer
format: int32
example: null
tier2TargetPrio:
type: string
enum:
- Low
- Mid
- High
- Critical
example: null
tier3PlusTargetPrio:
type: string
enum:
- Low
- Mid
- High
- Critical
example: null
tier2MinPrio:
type: string
enum:
- Low
- Mid
- High
- Critical
example: null
tier3PlusMinPrio:
type: string
enum:
- Low
- Mid
- High
- Critical
example: null
scopePrivate:
type: boolean
example: null
scopeShared:
type: boolean
example: null
scopePublic:
type: boolean
example: null
sourceCustoms:
type: boolean
example: null
sourcePrewavePrediction:
type: boolean
example: null
sourceMedia:
type: boolean
example: null
sourceCustomer:
type: boolean
example: null
minShipments:
type:
- integer
- 'null'
format: int32
example: null
probability:
type:
- integer
- 'null'
format: int32
example: null
lastShipmentsPeriodFrom:
type:
- string
- 'null'
format: date
example: null
lastShipmentsPeriodTo:
type:
- string
- 'null'
format: date
example: null
suspectedSuppliers:
type: boolean
example: null
logisticsProvider:
type: boolean
example: null
example: null
RiskAnalysisLock:
required:
- locked
- type
type: object
properties:
type:
type: string
enum:
- Form
- Suppliers
- Matrix
- Actions
- Scoping
- Products
example: null
locked:
type: boolean
example: null
user:
$ref: '#/components/schemas/UserDTO'
lockedAt:
type:
- string
- 'null'
format: date-time
example: null
example: null
EdgeImpactData:
required:
- causalContribution
- coc
- daysOnHand
- deviation
- edgeId
- stockAtSupplier
- stockOnPremise
- validFrom
- validTo
type: object
properties:
edgeId:
type: integer
format: int32
example: null
validFrom:
type: string
format: date-time
example: null
validTo:
type: string
format: date-time
example: null
purchase:
type:
- number
- 'null'
example: null
actualPurchase:
type:
- number
- 'null'
example: null
diForced:
type:
- string
- 'null'
enum:
- NA
- 'No'
- Low
- Mid
- High
- Critical
example: null
di:
type:
- number
- 'null'
format: double
example: null
causalContribution:
type: boolean
example: null
bi12:
type:
- number
- 'null'
example: null
coc:
type: boolean
example: null
mttrGrossE:
type:
- number
- 'null'
format: double
example: null
mttrNetE:
type:
- number
- 'null'
format: double
example: null
mttrGrossI:
type:
- number
- 'null'
format: double
example: null
mttrNetI:
type:
- number
- 'null'
format: double
example: null
stockOnPremise:
type: number
format: double
example: null
stockAtSupplier:
type: number
format: double
example: null
daysOnHand:
type: number
format: double
example: null
deviation:
type: string
enum:
- NotApplicable
- OnTarget
- Below
- Above
example: null
location:
type:
- string
- 'null'
enum:
- SameBuilding
- DifferentFireSection
- DifferentBuilding
- NotApplicable
example: null
lastConfirmationDate:
type:
- string
- 'null'
format: date
exampl
# --- truncated at 32 KB (91 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/prewave/refs/heads/main/openapi/prewave-disruptions-api-openapi.yml